Add gtk_widget_set_focus_child
authorTimm Bäder <mail@baedert.org>
Fri, 6 Jan 2017 16:06:51 +0000 (17:06 +0100)
committerTimm Bäder <mail@baedert.org>
Sat, 7 Jan 2017 16:19:30 +0000 (17:19 +0100)
With a very useful implementation, but at least now we don't get runtime
warnings.

gtk/gtkwidget.c
gtk/gtkwidget.h
gtk/gtkwindow.c

index 8bebdfb04845842ab7088b65037551bc8afd3223..e61ea434067e294a1997d23874155d30e86e0ea2 100644 (file)
@@ -7231,7 +7231,7 @@ gtk_widget_real_grab_focus (GtkWidget *focus_widget)
                  while (widget->priv->parent)
                    {
                      widget = widget->priv->parent;
-                     gtk_container_set_focus_child (GTK_CONTAINER (widget), NULL);
+                      gtk_widget_set_focus_child (widget, NULL);
                      if (widget == common_ancestor)
                        break;
                    }
@@ -7255,7 +7255,7 @@ gtk_widget_real_grab_focus (GtkWidget *focus_widget)
       widget = focus_widget;
       while (widget->priv->parent)
        {
-         gtk_container_set_focus_child (GTK_CONTAINER (widget->priv->parent), widget);
+          gtk_widget_set_focus_child (widget->priv->parent, widget);
          widget = widget->priv->parent;
        }
       if (GTK_IS_WINDOW (widget))
@@ -15804,3 +15804,21 @@ gtk_widget_snapshot_child (GtkWidget   *widget,
   gtk_widget_snapshot (child, snapshot);
   gtk_snapshot_translate_2d (snapshot, -x, -y);
 }
+
+void
+gtk_widget_set_focus_child (GtkWidget *widget,
+                            GtkWidget *child)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  if (child != NULL)
+    {
+      g_return_if_fail (GTK_IS_WIDGET (child));
+      g_return_if_fail (gtk_widget_get_parent (child) == widget);
+    }
+
+  if (GTK_IS_CONTAINER (widget))
+    gtk_container_set_focus_child (GTK_CONTAINER (widget), child);
+
+  /* TODO: ??? */
+}
index 33db17d6e4e4bed5c2d3df7e24797003ec6fbee8..319c7d76d4ab1b89659e628dbe0dab490b3c6d39 100644 (file)
@@ -1258,6 +1258,9 @@ GDK_AVAILABLE_IN_3_90
 GtkWidget *             gtk_widget_get_next_sibling     (GtkWidget *widget);
 GDK_AVAILABLE_IN_3_90
 GtkWidget *             gtk_widget_get_prev_sibling     (GtkWidget *widget);
+GDK_AVAILABLE_IN_3_90
+void                    gtk_widget_set_focus_child      (GtkWidget *widget,
+                                                         GtkWidget *child);
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkWidget, g_object_unref)
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRequisition, gtk_requisition_free)
index 1d03a667b5daf826dee506b1298665259a4e4727..dbdeb18880ccffc5aa668d85488c247f9290b5d4 100644 (file)
@@ -2539,7 +2539,7 @@ gtk_window_set_focus (GtkWindow *window,
          while ((parent = _gtk_widget_get_parent (widget)))
            {
              widget = parent;
-             gtk_container_set_focus_child (GTK_CONTAINER (widget), NULL);
+              gtk_widget_set_focus_child (widget, NULL);
            }
        }